package view
{
	import flash.events.Event;
	
	import model.AnneeEtude;
	import model.Droit;
	import model.GroupeEtudiants;
	import model.proxy.GroupeProxy;
	
	import mx.collections.ArrayCollection;
	
	import org.puremvc.as3.interfaces.IMediator;
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.mediator.Mediator;
	
	import view.components.GroupePanel; 
	
	public class GroupePanelMediator extends Mediator implements IMediator 
	{ 
		
		public static const NAME : String = 'GroupePanelMediator'; 
			
		/** 
		 * Constructor 
		 * Listen event of the component to send notification 
		 */ 
		 public function GroupePanelMediator(viewComponent : GroupePanel) 
		 { 
		 	super(NAME, viewComponent); 
		 	viewComponent.addEventListener(GroupePanel.SUPPRIMER_GROUPE, supprimerGroupeNotification);
		 	viewComponent.addEventListener(GroupePanel.VALIDER_AJOUT_GROUPE, validerAjoutGroupeNotification);
		 	viewComponent.addEventListener(GroupePanel.VALIDER_MODIF_GROUPE, validerModifGroupeNotification);
		 	viewComponent.addEventListener(GroupePanel.OBTENIR_LISTE_ANNEES_ETUDE_GROUPE, obtenirListeAnneesEtudeNotification);
		 	viewComponent.addEventListener(GroupePanel.OBTENIR_LISTE_GROUPES, obtenirListeGroupesNotification);
		 	viewComponent.addEventListener(GroupePanel.OBTENIR_LISTE_TYPES_ENSEIGNEMENT, obtenirListeTypesEnseignementNotification);
		 	viewComponent.addEventListener(GroupePanel.OBTENIR_LISTE_GROUPES_INCOMPATIBLES, obtenirListeGroupesIncompatiblesNotification);
		 	viewComponent.addEventListener(GroupePanel.OBTENIR_LISTE_ANNEES_UNIVERSITAIRE_GROUPE, obtenirListeAnneesUniversitaireNotification);
		 } 
		 
		 
		 /** 
		 * Send a formation notification with a formationVO loaded with the values entered 
		 */ 
		 private function validerAjoutGroupeNotification(event : Event=null):void 
		 { 
			 var groupe:GroupeEtudiants = new GroupeEtudiants(); 
			 groupe.nom = groupePanel.nomGroupe.text;
			 groupe.id_type_ens = groupePanel.comboTypesEnseignement.selectedItem.valueOf().id_type_ens;
			 groupe.id_an_etude = groupePanel.comboAnneesEtude.selectedItem.valueOf().id_an_etude;
			 var anneeEtude:AnneeEtude = (groupePanel.comboAnneesEtude.selectedItem as AnneeEtude); 
			 var listeGroupesIncompatibles:Array;
			 if (groupePanel.incompatibles.dataProvider != null)
			 	listeGroupesIncompatibles = (groupePanel.incompatibles.dataProvider.source as Array);
			 sendNotification(GroupePanel.VALIDER_AJOUT_GROUPE, [groupe,anneeEtude,listeGroupesIncompatibles]); 
		 } 
		 
		 private function validerModifGroupeNotification(event : Event=null):void 
		 { 
			 var groupe:GroupeEtudiants = groupePanel.affichage.selectedItem.valueOf();  
			 groupe.nom = groupePanel.nomGroupe.text;
			 groupe.id_type_ens = groupePanel.comboTypesEnseignement.selectedItem.valueOf().id_type_ens;
			 groupe.id_an_etude = groupePanel.comboAnneesEtude.selectedItem.valueOf().id_an_etude;
			 var anneeEtude:AnneeEtude = (groupePanel.comboAnneesEtude.selectedItem as AnneeEtude); 
			 var listeGroupesIncompatibles:Array;
			 if (groupePanel.incompatibles.dataProvider != null)
			 	listeGroupesIncompatibles = (groupePanel.incompatibles.dataProvider.source as Array);			 
			 sendNotification(GroupePanel.VALIDER_MODIF_GROUPE, [groupe,anneeEtude,listeGroupesIncompatibles]); 
		 } 
		 
		 private function supprimerGroupeNotification(event : Event=null):void
		 {
		 	var listeGroupes:Array = groupePanel.affichage.selectedItems;
		 	var anneeEtude:AnneeEtude = (groupePanel.comboAnneesEtude.selectedItem as AnneeEtude); 
		 	sendNotification(GroupePanel.SUPPRIMER_GROUPE, [listeGroupes, anneeEtude]);
		 }
		 
		 private function obtenirListeAnneesEtudeNotification(event : Event=null):void
		 { 
			 sendNotification(GroupePanel.OBTENIR_LISTE_ANNEES_ETUDE_GROUPE, groupePanel.comboAnneesUniv.selectedItem);
		 }
		 
		 private function obtenirListeGroupesIncompatiblesNotification(event : Event=null):void
		 {
		 	 sendNotification(GroupePanel.OBTENIR_LISTE_GROUPES_INCOMPATIBLES, groupePanel.affichage.selectedItem);
		 } 
		 
		 private function obtenirListeTypesEnseignementNotification(event : Event=null):void
		 { 
			 sendNotification(GroupePanel.OBTENIR_LISTE_TYPES_ENSEIGNEMENT, null); 
		 } 
		 
		 private function obtenirListeGroupesNotification(event : Event=null):void
		 { 
		 	 var anneeEtude:AnneeEtude = (groupePanel.comboAnneesEtude.selectedItem as AnneeEtude); 
			 sendNotification(GroupePanel.OBTENIR_LISTE_GROUPES, anneeEtude); 
		 }  
		 
		 private function obtenirListeAnneesUniversitaireNotification(event : Event=null):void
		 {  
			 sendNotification(GroupePanel.OBTENIR_LISTE_ANNEES_UNIVERSITAIRE_GROUPE, null); 
		 } 

		 override public function listNotificationInterests():Array 
		 { 
		 	return [ GroupeProxy.LISTE_GROUPES_OBTENUE, 
		 			GroupeProxy.LISTE_ANNEES_ETUDE_OBTENUE, 
		 			GroupeProxy.LISTE_TYPES_ENSEIGNEMENT_OBTENUE,
		 			GroupeProxy.LISTE_GROUPES_INCOMPATIBLES_OBTENUE,
		 			GroupeProxy.LISTE_ANNEES_UNIVERSITAIRE_GROUPE_OBTENUE
		 			]; 
		 } 
		 

		 override public function handleNotification(note : INotification):void 
		 { 
			 switch (note.getName()) 
			 { 
			 	case GroupeProxy.LISTE_GROUPES_OBTENUE:
			 	{
			 		groupePanel.affichage.dataProvider = (note.getBody() as Array);
			 		groupePanel.toutes.dataProvider = (note.getBody() as Array);	
			 		break;
			 	}
			 	case GroupeProxy.LISTE_ANNEES_ETUDE_OBTENUE:
			 	{
			 		groupePanel.comboAnneesEtude.dataProvider = (note.getBody() as Array);	
			 		groupePanel.choixComboAnneeEtude();
			 		break;
			 	}
			 	case GroupeProxy.LISTE_TYPES_ENSEIGNEMENT_OBTENUE:
			 	{
			 		groupePanel.comboTypesEnseignement.dataProvider = (note.getBody() as Array);
			 		groupePanel.choixComboAnneeUniv();	
			 		break;
			 	}
			 	case GroupeProxy.LISTE_GROUPES_INCOMPATIBLES_OBTENUE:
			 	{
			 		var ac_incomp:ArrayCollection = new ArrayCollection;
			 		var a_toutes:Array = new Array;
			 		var ac_toutes:ArrayCollection = new ArrayCollection;
			 		a_toutes = (groupePanel.affichage.dataProvider.source as Array).concat();
			 		ac_toutes = new ArrayCollection(a_toutes);
			 		ac_toutes.removeItemAt(ac_toutes.getItemIndex(groupePanel.affichage.selectedItem));
			 		if (note.getBody() != null){
			 			ac_incomp = new ArrayCollection(note.getBody() as Array);
				 		if(ac_incomp!=null)
				 		{	
				 			for (var i:uint = 0 ; i<ac_incomp.length ; i++)
				 			{
				 				for (var j:uint = 0 ; j<ac_toutes.length ; j++)
				 				{
				 					if((ac_incomp[i] as GroupeEtudiants).id_groupe_etud == 
				 								(ac_toutes[j] as GroupeEtudiants).id_groupe_etud)
				 						ac_toutes.removeItemAt(j);
								}
							}
				 			groupePanel.incompatibles.dataProvider = ac_incomp;
				 			groupePanel.toutes.dataProvider = ac_toutes;
				 		}
			 		}
			 		else 
			 		{
			 			groupePanel.incompatibles.dataProvider=new Array;	
			 		}
			 		break;
			 	}
			 	case GroupeProxy.LISTE_ANNEES_UNIVERSITAIRE_GROUPE_OBTENUE:
			 	{
			 		groupePanel.comboAnneesUniv.dataProvider = (note.getBody() as Array);	
			 		break;
			 	}
			 	default:
			 	break;
		 	} 
		 } 
		 
		 /** 
		 * Get the loginPanel component 
		 */ 
		 private function get groupePanel():GroupePanel 
		 { 
		 	return viewComponent as GroupePanel; 
		 }
	}
}